Verkooporder NedFox XSD

Elk NedFox XML verkooporder bericht wat door de ShopServer en door RetailVista ontvangen wordt, zal altijd eerst gevalideerd worden tegen een XSD schema. Dat gebeurd op basis van het versienummer in het XML bericht. Onderstaand toont het XSD schema versie 1.0 die gebruikt wordt om een XML verkooporder bericht versie 1.0 te valideren. Als de validatie negatief uitvalt, zal het bericht niet worden verwerkt.

Uit de XSD kan ook worden gehaald welke velden verplicht zijn en welke optioneel zijn. Een aanduiding als 'minOccurs=0' geeft aan dat het veld optioneel is. Als er dan geen inhoud is voor dat veld, dan kan het veld helemaal weggelaten worden uit de XML. Ook hebben sommige velden een type aanduiding, zoals bijvoorbeeld het huisnummer (xs:int). Van een dergelijk veld wordt in de XSD validatie al gecontroleerd of er de inhoud van de aangeleverde gegevens correct is.

Na de bericht validatie volgen er nog andere controles, zoals bijvoorbeeld het bestaan van aansluitnummers, barcodes etcetera. Ook dat kan een reden zijn dat het bericht na een succesvolle XSD validatie alsnog afgekeurd wordt.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="urn:xmlns:nedfox-retaillink-com:WebOrder"
           xmlns:xsi="urn:xmlns:nedfox-retaillink-com:WebOrder" version="1.0" elementFormDefault="qualified">
  <xs:element name="Interchange">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Envelope" type="xsi:Envelope" maxOccurs="1" minOccurs="1"/>
        <xs:element name="Messages" type="xsi:Messages" maxOccurs="1" minOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="version" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="Envelope">
      <xs:sequence>
        <xs:element name="FromPartyNumber" type="xs:long" maxOccurs="1" minOccurs="1"/>
        <xs:element name="FromPartyName" maxOccurs="1" minOccurs="0"/>
        <xs:element name="ToPartyNumber" type="xs:long" maxOccurs="1" minOccurs="1"/>
        <xs:element name="ToPartyName" maxOccurs="1" minOccurs="0"/>
        <xs:element name="InterchangeReference" minOccurs="1" maxOccurs="1"/>
        <xs:element name="InterchangeDateTime" minOccurs="1" maxOccurs="1"/>
        <xs:element name="InterchangeTest" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Messages">
    <xs:sequence>
      <xs:element name="Message" type="xsi:Message" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Message">
    <xs:sequence>
      <xs:element name="MessageDateTime" type="xs:dateTime" minOccurs="1" maxOccurs="1"/>
      <xs:element name="MessageReference" minOccurs="1" maxOccurs="1"/>
      <xs:element name="HighPriority" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
      <xs:element name="Header" type="xsi:Header" maxOccurs="1" minOccurs="1"/>
      <xs:element name="Rows" type="xsi:Rows" maxOccurs="1" minOccurs="1"/>
      <xs:element name="Footer" type="xsi:Footer" maxOccurs="1" minOccurs="1"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Header">
    <xs:all>
      <xs:element name="SupplierPartyNumber" type="xs:long" minOccurs="1" maxOccurs="1"/>
      <xs:element name="BuyerPartyNumber" type="xs:long" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Customer" type="xsi:Customer" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Delivery" type="xsi:Delivery" minOccurs="0" maxOccurs="1"/>
      <xs:element name="OrderDetails" type="xsi:OrderDetails" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Transport" type="xsi:Transport" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Payments" type="xsi:Payments" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Customer">
    <xs:all>
      <xs:element name="CompanyName" minOccurs="0" maxOccurs="1"/>
      <xs:element name="FirstName" minOccurs="1" maxOccurs="1"/>
      <xs:element name="MiddleName" minOccurs="1" maxOccurs="1"/>
      <xs:element name="LastName" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Address" type="xsi:Address" minOccurs="1" maxOccurs="1"/>
      <xs:element name="LandlinePhoneNumber" minOccurs="0" maxOccurs="1"/>
      <xs:element name="CellPhoneNumber" minOccurs="0" maxOccurs="1"/>
      <xs:element name="EmailAddress" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Delivery">
    <xs:all>
      <xs:element name="Name" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Address" type="xsi:Address" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Address">
    <xs:all>
      <xs:element name="AttentionOf" minOccurs="0" maxOccurs="1"/>
      <xs:element name="StreetName" minOccurs="1" maxOccurs="1"/>
      <xs:element name="StreetNumber" minOccurs="0" maxOccurs="1" type="xs:int"/>
      <xs:element name="StreetNumberAddOn" minOccurs="0" maxOccurs="1"/>
      <xs:element name="ZipCode" minOccurs="1" maxOccurs="1"/>
      <xs:element name="State" minOccurs="0" maxOccurs="1"/>
      <xs:element name="City" minOccurs="1" maxOccurs="1"/>
      <xs:element name="CountryIsoCode" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="OrderDetails">
    <xs:all>
      <xs:element name="RequestedDeliveryDate" type="xs:date" minOccurs="0" maxOccurs="1"/>
      <xs:element name="ExpectedDeliveryDate" type="xs:date" minOccurs="0" maxOccurs="1"/>
      <xs:element name="OrderDateTime" type="xs:dateTime" minOccurs="1" maxOccurs="1"/>
      <xs:element name="OrderReference" minOccurs="1" maxOccurs="1"/>
      <xs:element name="ClassificationDescription" minOccurs="0" maxOccurs="1"/>
      <xs:element name="FreeText" minOccurs="0" maxOccurs="1"/>
      <xs:element name="CostCenterCode" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Transport">
    <xs:all>
      <xs:element name="TypeDescription" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Properties" type="xsi:TransportProperties" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="TransportProperties">
    <xs:sequence>
      <xs:element name="Property" type="xsi:TransportProperty" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="TransportProperty">
    <xs:all>
      <xs:element name="Name" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Value" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Payments">
    <xs:sequence>
      <xs:element name="Payment" type="xsi:Payment" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Payment">
    <xs:all>
      <xs:element name="TypeDescription" minOccurs="1" maxOccurs="1" />
      <xs:element name="Value" type="xs:decimal" minOccurs="1" maxOccurs="1"/>
      <xs:element name="DateTime" type="xs:dateTime" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Reference" minOccurs="0" maxOccurs="1" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Rows">
    <xs:sequence>
      <xs:element name="Row" type="xsi:Row" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Row">
    <xs:all>
      <xs:element name="Barcode" minOccurs="1" maxOccurs="1">
        <xs:complexType>
          <xs:choice minOccurs="1" maxOccurs="1">
            <xs:element name="BarcodeValue" minOccurs="0" maxOccurs="1" type="xs:long"/>
            <xs:element name="BarcodeText" minOccurs="0" maxOccurs="1"/>
          </xs:choice>
        </xs:complexType>
      </xs:element>
      <xs:element name="ProductDescription" minOccurs="0" maxOccurs="1"/>
      <xs:element name="SkuQuantity" minOccurs="1" maxOccurs="1" type="xs:int"/>
      <xs:element name="Price" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:all>
            <xs:element name="GrossSalePriceInclVat" minOccurs="0" maxOccurs="1" type="xs:decimal"/>
            <xs:element name="NetSalePriceInclVat" minOccurs="1" maxOccurs="1" type="xs:decimal"/>
            <xs:element name="SalePriceType" minOccurs="1" maxOccurs="1">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:pattern value="Sku|Quantity" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:all>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Footer">
  </xs:complexType>
</xs:schema>